Often, adding new functionality to existing software applications is desirable. For the authors of the applications, adding new features or new functionality is practical, as the functionality can be added to the source code of existing software. In other cases, the task may require more than simply modifying the source code of the application.
For example, a third-party vendor wishing to offer software that adds functionality to an existing application may be unable to do so without access to the source code for the existing application.
Similarly, even where a vendor wants to add to an existing application and has access to the source code, it is possible that the application is extremely complex or written using a legacy programming language. It may be difficult to find personnel to work with the existing source code of such older applications to add functionality due to lack of documentation or inexperience with legacy programming languages.
In some cases, an existing application may be extensible through an application programming interface (API) that allows third-party developers to add features to the software by way of new code that is run inside or otherwise permitted to access the internals of the existing application.
However, in other cases no such extensibility features are provided or the extensibility features may not be such that they permit adding functionality of the desired type.
Web-based applications are accessed by users via a web browser that accesses pages from a server. In some cases, there may be no extensibility features provided in the server software providing such an application. In other cases, the server may be operated under the control of the software vendor such as with, for example, a cloud service, providing no opportunity for added third-party functionality even if extensibility features exist on the server.
In yet other cases users may need or choose to interact with two or more related web-based applications using, for example, the tab or multiple-window features of a web browser to separately access the web pages providing the interface of each of the applications. Data sharing across those applications may not be easy.